package com.zhentao.vo;

import lombok.Data;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 参数变更日志VO
 * @author zhentao
 * @date 2024-12-19
 */
@Data
public class ParamChangeLogVO {
    
    /**
     * 主键ID
     */
    private Long id;
    
    /**
     * 变更类型
     */
    private String changeType;
    
    /**
     * 变更类型描述
     */
    private String changeTypeDesc;
    
    /**
     * 目标类型
     */
    private String targetType;
    
    /**
     * 目标类型描述
     */
    private String targetTypeDesc;
    
    /**
     * 目标ID
     */
    private Long targetId;
    
    /**
     * 目标标识
     */
    private String targetKey;
    
    /**
     * 目标名称
     */
    private String targetName;
    
    /**
     * 变更前的值（原始JSON）
     */
    private String oldValue;
    
    /**
     * 变更后的值（原始JSON）
     */
    private String newValue;
    
    /**
     * 解析后的变更前数据
     */
    private Map<String, Object> oldData;
    
    /**
     * 解析后的变更后数据
     */
    private Map<String, Object> newData;
    
    /**
     * 变更字段列表
     */
    private List<ChangeFieldVO> changedFields;
    
    /**
     * 变更原因/备注
     */
    private String changeReason;
    
    /**
     * 变更人
     */
    private String changeBy;
    
    /**
     * 变更时间
     */
    private Date changeTime;
    
    /**
     * 变更IP地址
     */
    private String changeIp;
    
    /**
     * 用户代理信息
     */
    private String userAgent;
    
    /**
     * 业务来源
     */
    private String businessSource;
    
    /**
     * 业务来源描述
     */
    private String businessSourceDesc;
    
    /**
     * 关联的业务ID
     */
    private String businessId;
    
    /**
     * 变更摘要
     */
    private String changeSummary;
    
    /**
     * 是否可回滚
     */
    private Boolean canRollback;
    
    /**
     * 回滚状态：NONE-未回滚，ROLLBACK-已回滚，PARTIAL-部分回滚
     */
    private String rollbackStatus;
    
    /**
     * 变更字段详情VO
     */
    @Data
    public static class ChangeFieldVO {
        /**
         * 字段名
         */
        private String fieldName;
        
        /**
         * 字段显示名
         */
        private String fieldDisplayName;
        
        /**
         * 旧值
         */
        private Object oldValue;
        
        /**
         * 新值
         */
        private Object newValue;
        
        /**
         * 字段类型
         */
        private String fieldType;
        
        /**
         * 变更类型：ADD-新增，UPDATE-修改，DELETE-删除
         */
        private String changeType;
    }
}

